package com.huan.netty01.netty;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.CharsetUtil;

import java.util.Scanner;

/**
 * @author 作者:刘欢    创建服务端处理器
 * @create 2024-03-19-14:45
 *  自定义的Handler需要继承Netty规定好的HandlerAdapter
 *  才能被Netty框架所关联，有点类似SpringMVC的适配器模式
 *
 */
public class MyServerHandler  extends ChannelInboundHandlerAdapter {


    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {


        //获取到线程池eventLoop，添加线程，执行
//        ctx.channel().eventLoop().execute(new Runnable() {
//            @Override
//            public void run() {
//                try {
//                    //长时间操作，不至于长时间的业务操作导致Handler阻塞
//                    Thread.sleep(1000);
//                    System.out.println("长时间的业务处理");
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
//            }
//        });


        //获取客户端发送过来的消息
        ByteBuf byteBuf = (ByteBuf) msg;
        System.out.println("收到客户端" + ctx.channel().remoteAddress() + "发送的消息：" + byteBuf.toString(CharsetUtil.UTF_8));
    }

    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {

//        while (true){
//            System.out.println("输入要给客户端发送的消息:");
//            //手动发送
//            Scanner scanner = new Scanner(System.in);
//            String next = scanner.next();
//            //发送消息给客户端
//            ctx.writeAndFlush(Unpooled.copiedBuffer(next, CharsetUtil.UTF_8));
//        }

//
        ctx.writeAndFlush(Unpooled.copiedBuffer("关闭聊天群", CharsetUtil.UTF_8));
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        //发生异常，关闭通道
        ctx.close();
    }





//    @Override
//    public void channelActive(ChannelHandlerContext ctx) throws Exception {
//        System.out.println("客户端已连接");
//    }
//
//    @Override
//    public void channelRead(ChannelHandlerContext ctx, Object msg) {
//        ByteBuf in = (ByteBuf) msg;
//        try {
//            // 读取客户端发送的消息
//            String receivedMessage = in.toString(io.netty.util.CharsetUtil.UTF_8);
//            System.out.println("服务端接收到消息：" + receivedMessage);
//
//            // 给客户端回复一条消息
//            String responseMessage = "服务端回复：" + receivedMessage;
//            ByteBuf out = Unpooled.copiedBuffer(responseMessage.getBytes(CharsetUtil.UTF_8));
//            ctx.writeAndFlush(out);
//        } finally {
//            // 释放（ReferenceCounted）对象
//            in.release();
//        }
//    }
//
//    @Override
//    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
//        cause.printStackTrace();
//        ctx.close();
//    }

}
